package seatiger.tomcat.catalina;

import seatiger.tomcat.catalina.deploy.FilterDef;
import seatiger.tomcat.catalina.deploy.FilterMap;

import javax.servlet.FilterConfig;
import javax.servlet.ServletContext;
import java.util.List;

/**
 * context 容器接口
 */
public interface Context extends Container{
    String RELOAD_EVENT = "reload";
    /**
     * 添加 请求路径 到 servlet name 的映射
     * @param pattern
     * @param name
     */
    void addServletMapping(String pattern, String name);

    /**
     * 查找servlet name
     * @param pattern
     * @return
     */
    String findServletMapping(String pattern);

    /**
     * 获取到所有的servletName
     * @return
     */
    String[] findServletMappings();

    String getDocBase();

    /**
     * 设置Context 容器 项目目录
     * @param docBase
     */
    void setDocBase(String docBase);

    /**
     * 添加过滤器的定义
     * @param filterDef
     */
    void addFilterDef(FilterDef filterDef);

    /**
     * 获取所有的过滤
     * @return
     */
    List<FilterDef> findFilterDefs();

    FilterConfig findFilterConfig(String filterName);

    /**
     * 添加FilterMap
     * @param filterMap
     */
    void addFilterMap(FilterMap filterMap);

    List<FilterMap> findFilterMaps();

    /**
     * 获取ServletContext
     * @return
     */
    ServletContext getServletContext();

    /**
     * 重新部署项目
     */
    void reload();

    /**
     * 设置路劲
     * @param path
     */
    void setPath(String path);

    String getPath();

    /**
     * 移除Filter定义
     * @param filterDef
     */
    void removeFilterDef(FilterDef filterDef);

    /**
     * 移除过滤器映射
     * @param filterMap
     */
    void removeFilterMap(FilterMap filterMap);

    /**
     * 移除servlet 的映射关系
     * @param pattern
     */
    void removeServletMapping(String pattern);
}
